摘要: 包括阿里云在内的很多云环境,因为不支持浮动IP广受诟病。目前阿里云在VPC网络下发布了HAVIP,能够实现arp宣告IP。这样也就让自己搭建HA成为了可能,有幸拿到了内测权限体验了一下。(classical网络依然不支持) 测试环境: 1 2 3 4 5 6 VPC:192.
包括阿里云在内的很多云环境,因为不支持浮动IP广受诟病。目前阿里云在VPC网络下发布了HAVIP,能够实现arp宣告IP。这样也就让自己搭建HA成为了可能,有幸拿到了内测权限体验了一下。(classical网络依然不支持)
测试环境:
1 2 3 4 5 6
| VPC:192.168.1.0/24 ECS: nginx1:192.168.1.1 nginx2:192.168.1.2 HAVIP:192.168.1.3 绑定到havip的公网EIP:121.43.187.37
|
配置完毕后的拓扑如下:
环境搭建完毕后,登陆主备ECS服务器,分别配置nginx+keepalived
MASTER服务器(nginx1)配置文件/etc/keepalived/keepalived.conf内容以及解释如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| ! Configuration File for keepalived global_defs { router_id Nginx1 } vrrp_script chk_nginx { script "/etc/keepalived/ck_ng.sh" interval 2 weight -5 fall 3 rise 2 } vrrp_instance VI_1 { state MASTER interface eth0 mcast_src_ip 192.168.1.1 virtual_router_id 55 priority 101 advert_int 1 authentication { auth_type PASS auth_pass aliyun } virtual_ipaddress { 192.168.1.4 } track_script { chk_nginx } }
|
BACKUP服务器(nginx2)的配置需要修改:
1 2 3
| state MASTER改为 state BACKUP mcast_src_ip 192.168.1.1改为backup服务器实际的IP mcast_src_ip 192.168.1.2 priority 101改小一些,比如 priority 100
|
其它保持一致即可
为了实现nginx服务异常的时候能够自动切换,需要自己写一个脚本,脚本没有硬性的要求,能够实现目标即可,这里 监控nginx进程数为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| vim /etc/keepalived/ck_ng.sh count=$(ps -C nginx --no-heading|wc -l) if [ "${count}" = "0" ]; then service nginx start sleep 2 count=$(ps -C nginx --no-heading|wc -l) if [ "${count}" = "0" ]; then /etc/init.d/keepalived stop fi fi
|
增加脚本的执行权限
1
| chmod +x vim /etc/keepalived/ck_ng.sh
|
分别启动nginx1和nginx2的nginx&keepalived服务:
1 2 3
| [root@Nginx1 ~] Starting nginx: [ OK ] Starting keepalived: [ OK ]
|
测试:
NGINX1/192.168.1.1的priority 为101,NGINX2/192.168.1.2的priority为100,这时候访问HAVIP绑定的EIP:http://121.43.187.37/可以看到访问到了服务器NGINX1,如下:
到HAVIP控制台查看,192.168.1.1的服务器为主服务器
这时候我们KILL掉nginx1服务器的nginx服务
查看日志,发送了移除VIP的报文:
1 2 3
| Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_vrrp[25019]: VRRP_Instance(VI_1) sending 0 priority Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_vrrp[25019]: VRRP_Instance(VI_1) removing protocol VIPs. Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_healthcheckers[25018]: Netlink reflector reports IP 192.168.1.3 removed
|
这时候访问http://121.43.187.37/,可以看到访问自动切换到了NGINX2
到HAVIP控制台查看,192.168.1.2的服务器为主服务器
重新启动nginx1的nginx和keepalive服务
查看日志可以看到keepalive重新发送了IP宣告的报文
1 2 3 4 5
| Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Entering MASTER STATE Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) setting protocol VIPs. Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.3 Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_healthcheckers[25609]: Netlink reflector reports IP 192.168.1.3 added Oct 23 17:22:19 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.3
|
重新访问http://121.43.187.37/测试,重新访问到了服务器NGINX1,到HAVIP控制台查看,192.168.1.1的服务器重新夺回了控制权,成为了为主服务器
这样就实现了阿里云环境下的HA切换。
实际测试,阿里云的多个HAVIP可以绑定到同样的两台机器,可以配置多组 vrrp_instance来实现双主。或者两台服务器同时为两个业务服务,避免资源浪费。同时能够做到主备